import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:network_info_plus/network_info_plus.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:location/location.dart' as loc;
import 'package:flutter/foundation.dart';
import 'dart:io';

class WifiUtils {
  final NetworkInfo _networkInfo = NetworkInfo();
  final loc.Location _locationService = loc.Location();

  /// 1. 申请必要权限（根据 Android 版本适配）
  Future<bool> requestRequiredPermissions() async {
    // 仅 Android 需要处理权限，iOS 权限在 Info.plist 配置后自动生效
    if (Platform.isIOS) return true;

    PermissionStatus locationPermissionStatus;
    final androidVersion = await _getAndroidSdkVersion();

    // Android 10+（API 29+）：必须申请 ACCESS_FINE_LOCATION
    if (androidVersion >= 29) {
      locationPermissionStatus = await Permission.location.request();
    }
    // Android 10 以下：申请 ACCESS_COARSE_LOCATION 或 ACCESS_FINE_LOCATION
    else {
      locationPermissionStatus = await Permission.locationWhenInUse.request();
    }


    // 位置权限是否授予
    return locationPermissionStatus.isGranted;
  }

  /// 2. 检查位置服务是否开启（Android 10+ 获取 Wi-Fi 名称必需）
  Future<bool> isLocationServiceEnabled() async {
    if (Platform.isIOS) return true;
    return await _locationService.serviceEnabled();
  }

  /// 3. 引导用户开启位置服务
  Future<bool> requestEnableLocationService() async {
    if (Platform.isIOS) return true;
    return await _locationService.requestService();
  }

  /// 4. 获取处理后的 Wi-Fi 名称（自动去除 Android 系统添加的引号）
  Future<String?> getProcessedWifiName() async {
    // 先检查是否连接 Wi-Fi
    List connectivityResult = await Connectivity().checkConnectivity();
    if (!connectivityResult.contains(ConnectivityResult.wifi)) {
      debugPrint("---connectivityResult：$connectivityResult");

      return "未连接 Wi-Fi";
    }

    // 获取原始 Wi-Fi 名称（可能带引号）
    String? rawWifiName;
    try {
      rawWifiName = await _networkInfo.getWifiName();

    } catch (e) {
      debugPrint("获取 Wi-Fi 名称失败：$e");
      return "获取失败";
    }

    // 处理 Android 系统添加的引号：仅当名称以 " 开头且以 " 结尾时移除
    if (rawWifiName == null || rawWifiName.isEmpty) {
      return "未知 Wi-Fi";
    }

    // 正则匹配：去除首尾的双引号（避免误删名称本身包含的引号）
    final processedName = rawWifiName.replaceFirst(RegExp(r'^"'), '').replaceFirst(RegExp(r'"$'), '');
    return processedName;
  }

  /// 5. 获取 Wi-Fi IP 地址
  Future<String?> getWifiIpAddress() async {
    try {
      return await _networkInfo.getWifiIP();
    } catch (e) {
      debugPrint("获取 IP 地址失败：$e");
      return "获取失败";
    }
  }

  /// 辅助方法：获取 Android SDK 版本（用于权限适配）
  Future<int> _getAndroidSdkVersion() async {
    if (Platform.isIOS) return 0;
    // 通过 permission_handler 间接获取 SDK 版本，或使用 device_info_plus 更精准
    final status = await Permission.location.status;
    return status.isGranted ? await _getSdkVersion() : 0;
  }

  // 实际获取 Android SDK 版本（简化实现，可替换为 device_info_plus）
  Future<int> _getSdkVersion() async {
    try {
      // 这里使用模拟逻辑，实际项目建议集成 device_info_plus 获取真实版本
      // 示例：DeviceInfoPlugin().androidInfo.version.sdkInt
      return 33; // 测试用，实际需动态获取
    } catch (e) {
      return 29; // 默认返回 Android 10 版本
    }
  }
}